package com.lyon.springboot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;

/**
 * 
 * @author LiuSongqing
 *
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

	/**
	 * 可以定义多个组，比如本类中定义把test和demo区分开了 （访问页面就可以看到效果了） 访问地址
	 * ：http://localhost:8080/swagger-ui.html#/
	 */
	@Bean
	public Docket testApi() {
		return new Docket(DocumentationType.SWAGGER_2).groupName("test").genericModelSubstitutes(DeferredResult.class)
				// .genericModelSubstitutes(ResponseEntity.class)
				.useDefaultResponseMessages(false).forCodeGeneration(true).pathMapping("/")// base，最终调用接口后会和paths拼接在一起
				.select()
				// .paths(or(regex("/api/test/.*")))//过滤的接口
				.paths(or(regex("/swagger/.*"))).build().apiInfo(testApiInfo());
	}

	@Bean
	public Docket demoApi() {
		return new Docket(DocumentationType.SWAGGER_2).groupName("demo").genericModelSubstitutes(DeferredResult.class)
				// .genericModelSubstitutes(ResponseEntity.class)
				.useDefaultResponseMessages(false).forCodeGeneration(false).pathMapping("/").select()
				.paths(or(regex("/demo/.*")))// 过滤的接口
				.build().apiInfo(demoApiInfo());
	}

	@Bean
	public Docket userApi() {
		return new Docket(DocumentationType.SWAGGER_2).groupName("user").genericModelSubstitutes(DeferredResult.class)
				.useDefaultResponseMessages(false).forCodeGeneration(true).pathMapping("/")// base，最终调用接口后会和paths拼接在一起
				.select().paths(or(regex("/user/.*")))// 过滤的接口
				.build().apiInfo(userApiInfo());
	}

	private ApiInfo testApiInfo() {
		ApiInfo apiInfo = new ApiInfo("springboot test API", // 大标题
				"test API", // 小标题
				"0.1", // 版本
				"NO terms of service", "1395532039@qq.com", // 作者
				"The Apache License, Version 2.0", // 链接显示文字
				"http://www.apache.org/licenses/LICENSE-2.0.html"// 网站链接
		);

		return apiInfo;
	}

	private ApiInfo demoApiInfo() {
		ApiInfo apiInfo = new ApiInfo("springboot demo API", // 大标题
				"demo API", // 小标题
				"1.0", // 版本
				"NO terms of service", "1395532039@qq.com", // 作者
				"The Apache License, Version 2.0", // 链接显示文字
				"http://www.apache.org/licenses/LICENSE-2.0.html"// 网站链接
		);

		return apiInfo;
	}

	private ApiInfo userApiInfo() {
		ApiInfo apiInfo = new ApiInfo("springboot User API", // 大标题
				"User REST API", // 小标题
				"1.0", // 版本
				"NO terms of service", "1395532039@qq.com", // 作者
				"The Apache License, Version 2.0", // 链接显示文字
				"http://www.apache.org/licenses/LICENSE-2.0.html"// 网站链接
		);

		return apiInfo;
	}

}